package pe.com.hermes.hermetic.modelo.daoimpl;

import com.ibatis.sqlmap.client.SqlMapClient;

import pe.com.hermes.hermetic.beans.ConfBean;
import pe.com.hermes.hermetic.beans.CorporacionBean;
import pe.com.hermes.hermetic.beans.EmpleadoBean;
import pe.com.hermes.hermetic.beans.FechaServidorBean;
import pe.com.hermes.hermetic.beans.SucursalBean;
import pe.com.hermes.hermetic.beans.TiposBean;

import pe.com.hermes.hermetic.beans.User;
import pe.com.hermes.hermetic.beans.UsuCodBancoBean;
import pe.com.hermes.hermetic.modelo.dao.TiposDAO;
import pe.com.hermes.hermetic.negocio.ultil.CadenaUtil;

import pe.com.hermes.hermetic.negocio.ultil.ConstantesHermetic;
//import pe.com.hermes.unidadesnegocio.comercial.entities.TarjetaEntity;


import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import java.util.Map;

import java.util.ResourceBundle;

import oracle.jdbc.OracleTypes;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.jdbc.core.CallableStatementCallback;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.GrantedAuthorityImpl;

import org.springframework.stereotype.Repository;

import pe.com.hermes.auditoriaclient.modelo.bean.AuditBean;
import pe.com.hermes.auditoriaclient.webservices.client.saaj.InseAuditClient;
import pe.com.hermes.hermetic.beans.UsersNivConfBean;
import pe.com.hermes.hermetic.exception.NiveAutoNotFoundException;
import pe.com.hermes.hermetic.exception.TooManyNiveAutoByUsuaException;
import pe.com.hermes.unidadesnegocio.comercial.entities.TarjetaEntity;
import pe.com.hermes.unidadesnegocio.procesamiento.entities.DenominacionEntity;

@Repository("tiposDAO")
public class TiposDAOImpl implements TiposDAO {
    @Autowired
    protected JdbcTemplate jdbcTemplate;
    private Logger logger = Logger.getLogger(this.getClass());

    @Autowired
    private SqlMapClient sqlMapClient;    

    public String getDesTipo(String codTipo) {
        logger.info("Obtener cuentas por sucursal y cliente");
        String SQL = 
            " select des_tipo from tg_tabl_tipo where cod_grup_tipo = 20 and " + 
            " cod_tipo = ? ";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { codTipo };
        //Ejecutar el query
        return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                        String.class);
    }

    public List getTipoPedido() {
        logger.info("Obtener listado de tipo de pedido.");
        String query = 
            " select des_tipo, cod_tipo" + " from tg_Tabl_tipo" + " Where cod_grup_tipo = 48 and cod_tipo in (1,5)" + 
            " order by 1";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),query);
        //Establecer los parametros
        Object[] params = new Object[] { };
        //Ejecutar el query
        return jdbcTemplate.query(query, params, new TipoPedidoMapper());
    }

    public void setSqlMapClient(SqlMapClient sqlMapClient) {
        this.sqlMapClient = sqlMapClient;
    }

    public Boolean isDispActi(int codCajero, int numDispensador) {
      Map map = new HashMap();
      try{
          map.put("P_COD_CJRO",codCajero);
          map.put("P_NUME_DISP",numDispensador);
          sqlMapClient.queryForObject("isDispActi",map);
          int resultado = (Integer)map.get("S_EXIST");
          return (resultado == 1);
      }catch(Exception e){
          logger.error(e);
          return false;
      }
    }

    public List getListSucursalesCC(String desSucu, String codClie) {
      Map map = new HashMap();
      try{
          map.put("P_DES_SUCU_HTB",desSucu);
          map.put("P_LIST_COD_CLIE",codClie);
          sqlMapClient.queryForObject("getListSucursalesCC",map);
          int erro = (Integer)map.get("S_ERRO");
          List listSucu = (List)map.get("S_LIST");
          return listSucu;
      }catch(Exception e){
          logger.error(e);
          return new ArrayList();
      }
    }

    public String getRazSocial(String usuWeb, int codRazoSoci) {
        Map map = new HashMap();
        map.put("P_COD_RAZO_SOCI",codRazoSoci);
        map.put("P_USU_WEB",usuWeb);
        String razSocial="";
        try{
            sqlMapClient.queryForObject("getRazSocial",map);
            int erro = (Integer)map.get("S_ERRO");
            razSocial=(String)map.get("S_DES_RAZO_SOCI");
        }catch(Exception e){
           logger.error(e);
        }
        return razSocial;
    }

    public CorporacionBean getCorporacionUsu(String usuWeb, int codRazoSoci) {
      Map map = new HashMap();
      map.put("P_COD_RAZO_SOCI",codRazoSoci);
      map.put("P_USU_WEB",usuWeb);
      CorporacionBean corporacionBean=new CorporacionBean();
      try{
          sqlMapClient.queryForObject("getCorporacionUsu",map);
          int erro = (Integer)map.get("S_ERRO");
          corporacionBean.setCod_corp((Integer)map.get("S_COD_CORP"));
          corporacionBean.setDes_corp((String)map.get("S_DES_CORP"));
      }catch(Exception e){
         logger.error(e);
      }
      return corporacionBean;
    }

    public UsuCodBancoBean getUsuCodBanco(int codRazoSoci,String codSucu) {
      Map map = new HashMap();
      map.put("P_COD_RAZO_SOCI",codRazoSoci);
      map.put("P_COD_SUCU_HTB",Integer.parseInt(codSucu));
      UsuCodBancoBean usuCodBancoBean = new UsuCodBancoBean();
      try{
          sqlMapClient.queryForObject("getUsuCodBanco",map);
          int erro = (Integer)map.get("S_ERRO");
          usuCodBancoBean.setBoveBanc(map.get("S_BOV_BANC")!=null?(Integer)map.get("S_BOV_BANC"):-1);
          usuCodBancoBean.setBoveProp(map.get("S_BOV_PROP")!=null?(Integer)map.get("S_BOV_PROP"):-1);
          usuCodBancoBean.setDiaHab((String)map.get("S_DIA_HAB"));
          usuCodBancoBean.setSusAnom(map.get("S_SUS_ANOM")!=null?(Integer)map.get("S_SUS_ANOM"):-1);
          usuCodBancoBean.setDifFecContAt(map.get("S_DIF_FECH_ATEN")!=null?(Integer)map.get("S_DIF_FECH_ATEN"):-1);
          usuCodBancoBean.setDifFecContPed(map.get("S_DIF_FECH_PEDI")!=null?(Integer)map.get("S_DIF_FECH_PEDI"):-1);
          usuCodBancoBean.setAlertPen((String)map.get("S_IND_ALER_PEND"));
          usuCodBancoBean.setHorAlertPen((String)map.get("S_HOR_ALER_PEND"));
          usuCodBancoBean.setAprAutPed(map.get("S_APR_AUTO_PEDI")!=null?(Integer)map.get("S_APR_AUTO_PEDI"):-1);
          usuCodBancoBean.setFaseAbono(map.get("S_FAS_ABON")!=null?(Integer)map.get("S_FAS_ABON"):-1);
          usuCodBancoBean.setValiParm((Integer)map.get("S_VALI_PARM"));
          usuCodBancoBean.setListUsu((String)map.get("S_COD_USERS"));
      }catch(Exception e){
         logger.error(e);
      }
      return usuCodBancoBean;
    }

    public UsuCodBancoBean getUsuCodBancoCorp(int codCorp,String codSucu) {
      Map map = new HashMap();
      map.put("P_COD_CORP",codCorp);
      map.put("P_COD_SUCU_HTB",Integer.parseInt(codSucu));
      UsuCodBancoBean usuCodBancoBean = new UsuCodBancoBean();
      try{
          sqlMapClient.queryForObject("getUsuCodBancoCorp",map);
          int erro = (Integer)map.get("S_ERRO");
          usuCodBancoBean.setBoveBanc((Integer)map.get("S_BOV_BANC"));
          usuCodBancoBean.setBoveProp((Integer)map.get("S_BOV_PROP"));
          usuCodBancoBean.setDiaHab((String)map.get("S_DIA_HAB"));
          usuCodBancoBean.setSusAnom((Integer)map.get("S_SUS_ANOM"));
          usuCodBancoBean.setDifFecContAt((Integer)map.get("S_DIF_FECH_ATEN"));
          usuCodBancoBean.setDifFecContPed((Integer)map.get("S_DIF_FECH_PEDI"));
          usuCodBancoBean.setAlertPen((String)map.get("S_IND_ALER_PEND"));
          usuCodBancoBean.setHorAlertPen((String)map.get("S_HOR_ALER_PEND"));
          usuCodBancoBean.setAprAutPed((Integer)map.get("S_APR_AUTO_PEDI"));
          usuCodBancoBean.setFaseAbono((Integer)map.get("S_FAS_ABON"));
          usuCodBancoBean.setValiParm((Integer)map.get("S_VALI_PARM"));
          usuCodBancoBean.setListUsu((String)map.get("S_COD_USERS"));
      }catch(Exception e){
         logger.error(e);
      }
      return usuCodBancoBean;
    }

    public int getTipClie(String codClie) {
      Map map = new HashMap();
      map.put("P_COD_CLIE",Integer.parseInt(codClie));
      int tipClie=0;
      try{
          sqlMapClient.queryForObject("getTipClie",map);
          int erro = (Integer)map.get("S_ERRO");
          tipClie=(Integer)map.get("S_TIP_CLIE");
          
      }catch(Exception e){
         logger.error(e);
      }
      return tipClie;
    }

    public List getListOrgDest(String codGrup, String listCodTip) {
      logger.info("Obtener listado de Origen destino.");
      String query = 
          " select des_larg,cod_tipo " + " from tg_Tabl_tipo" + " Where cod_grup_tipo = "+ codGrup +" and cod_tipo in (" +listCodTip+") and IND_ACTI=1"+ 
          " order by 1";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),query);
      //Establecer los parametros
      Object[] params = new Object[] { };
      //Ejecutar el query
      return jdbcTemplate.query(query, params, new TipoBilletajeMapper());
    }

    public List getListGrupTipoOperacion() {
      Map map = new HashMap();
      List listPuntos = new ArrayList();
      try{
          sqlMapClient.queryForObject("getListGrupTipoOperacion",map);
          listPuntos = (List)map.get("S_LIST");
      }catch(Exception e){
          logger.error(e);
      }
      return listPuntos;
    }
    
    public List getIngresosSalidasGralList(String tipClie, String listCodClies,
                                           String listCodSucurs,
                                           String listPuntosCadena, String origen,
                                           String listCodBancCadena,
                                           String listCodCtaCadena,
                                           String tipoOperacion, String tipoUm,
                                           String listcodBove,
                                           String tipoCliente,
                                           String listClieBanc,
                                           String tipFecha, String tipMov,
                                           String fecDesde, String fecHasta) {
      
      List list = new ArrayList();
      Map map = new HashMap();
      map.put("P_COD_TIP_CLIE",tipClie+"");
      map.put("P_LIST_COD_CLIE",listCodClies);
      map.put("P_LIST_COD_SUCU",listCodSucurs);
      map.put("P_LIST_COD_PUNT",listPuntosCadena);
      map.put("P_COD_DEST",origen+"");
      map.put("P_LIST_COD_BAN",listCodBancCadena);
      map.put("P_LIST_COD_CUE",listCodCtaCadena);
      map.put("P_COD_OPE",tipoOperacion);
      map.put("P_COD_UM",tipoUm);
      map.put("P_LIST_COD_BOVE",listcodBove);
      map.put("P_LIST_TIP_CLIE",tipoCliente);
      map.put("P_LIST_CLIE_BAN",listClieBanc);
      map.put("P_FEC_TIPO",tipFecha);
      map.put("P_TIP_MOV",tipMov);
      map.put("P_FEC_INI",fecDesde);
      map.put("P_FEC_FIN",fecHasta);
      
      int erro = 0;
      String sqlQuery="";
      try{
          sqlMapClient.queryForObject("getListIngSal",map);
          erro = (Integer)map.get("S_ERRO");
          sqlQuery = (String)map.get("S_QUERY");
          if(erro==0)
              list=(List)map.get("S_LIST");
          else
              throw new Exception(map.get("S_MENS").toString());
      }catch(Exception e){
          logger.error(e);
      }
      return list;
    }



    /**
     * Clase CuentaMapper para llenar la Lista de Resultados
     */
    protected class TipoPedidoMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            //Establecer los atributos en la entidad CuentaBean
            TiposBean cuenta = new TiposBean();
            cuenta.setDescripcion(rs.getString(1));
            cuenta.setCodigo(rs.getString(2));
            return cuenta;
        }
    }

    public List getTipoBilletaje() {
        logger.info("Obtener listado de tipo de Billetaje.");
        String query = 
            " select des_tipo, cod_tipo" + " from tg_Tabl_tipo" + " Where cod_grup_tipo = 47 and cod_tipo != '0' " + 
            " order by 1";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),query);
        //Establecer los parametros
        Object[] params = new Object[] { };
        //Ejecutar el query
        return jdbcTemplate.query(query, params, new TipoBilletajeMapper());
    }

    /**
     * Clase CuentaMapper para llenar la Lista de Resultados
     */
    protected class TipoBilletajeMapper implements RowMapper {
        public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
            //Establecer los atributos en la entidad CuentaBean
            TiposBean billete = new TiposBean();
            billete.setDescripcion(rs.getString(1));
            billete.setCodigo(rs.getString(2));
            return billete;
        }
    }


    public String getDescripcionBillete(String codTipo) {
        String SQL = 
            " select des_tipo from tg_tabl_tipo" + " where cod_grup_tipo = 47 and cod_tipo = ? ";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { codTipo };
        //Ejecutar el query
        return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                        String.class);
    }

    public String getDescripcion(String codGrupo, String codTipo) {
        String SQL = 
            " Select des_tipo from tg_Tabl_tipo Where cod_grup_tipo = ? " + 
            " and cod_tipo = ?";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { codGrupo, codTipo };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "";
        }
    }
    
    public String getDescripcionLarga(String codGrupo, String codTipo) {
        String SQL = 
            " Select des_larg from tg_Tabl_tipo Where cod_grup_tipo = ? " + 
            " and cod_tipo = ?";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { codGrupo, codTipo };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "";
        }
    }
    

    public String getEstado(String codigo) {
        String SQL = 
            "select des_estd from tg_tabl_estd where cod_grup_estd = 10 and cod_estd = ?";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        Object[] params = new Object[] { codigo };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "";
        }
    }

    public List getTiposAnomalias() {
        String SQL = 
            "SELECT ANOM.DES_ANOM,ANOM.COD_ANOM, ANOM.TIP_MONE, ANOM.IND_NUME_BILL\n" + 
            "  FROM SHMC_ANOM ANOM" + 
            " WHERE ANOM.IND_ACTA = '1'" + 
            "   AND ANOM.TIP_PROC = 1" + 
            "   AND ANOM.TIP_PROD = 1" +
            "   AND COD_ANOM <> '17'" + 
            " ORDER BY ANOM.DES_ANOM ASC";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        Object[] params = new Object[] { };
        //Ejecutar el query
        return jdbcTemplate.query(SQL, params, new TipoPedidoMapper());
    }

    public String existePassword(String usuario, String cliente) {
        String SQL = 
            " select 1 from csmc_usua_web where" + " usu_web = upper(?) and " + 
            " cod_razo_soci = (select cod_razo_soci from ve_cliente where cod_clie = ?)";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { usuario, cliente };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "0";
        }
    }

    public String validaPassword(String usuario, String password, 
                                 String cliente) {
        System.out.println("usuario:" + usuario);
        System.out.println("password:" + password);
        System.out.println("cliente:" + cliente);

        String SQL = 
            " select 1 from csmc_usua_web where" + " usu_web = upper(?) and " + 
            " pas_web = cryptit.encrypt(upper(?),cryptit.key) and " + 
            " cod_razo_soci = (select cod_razo_soci from ve_cliente where cod_clie = ?)";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        //Establecer los parametros
        Object[] params = new Object[] { usuario, password, cliente };
        //Ejecutar el query
        try {
            return (String)this.jdbcTemplate.queryForObject(SQL, params, 
                                                            String.class);
        } catch (final EmptyResultDataAccessException e) {
            return "0";
        }
    }

    public void actualizaPassword(String password, String usuario, 
                                  String cliente) {
        String SQL = 
            " update csmc_usua_web set pas_web = cryptit.encrypt(upper(?),cryptit.key) where" + 
            " usu_web = upper(?) and " + 
            " cod_razo_soci = (select cod_razo_soci from ve_cliente where cod_clie = ?)";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        Object[] params = new Object[] { password, usuario, cliente };
        jdbcTemplate.update(SQL, params);
    }

    public List getTipoMoneda() {
        logger.info("Obtener listado de tipo de Billetaje.");
        String query = 
            "select des_tipo, cod_tipo " + "from tg_tabl_tipo " + "Where cod_grup_tipo = 19" + 
            "and cod_tipo != 0 " + "Order by 1";
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),query);
        //Establecer los parametros
        Object[] params = new Object[] { };
        //Ejecutar el query
        return jdbcTemplate.query(query, params, new TipoBilletajeMapper());
    }

    public FechaServidorBean getFechaServidor(){

        String SQL = "{ call APERTURA.HWPG_TABL.HWPR_RETU_FECH_FORM(?,?,?,?,?, ?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        final FechaServidorBean fechaServidor = new FechaServidorBean();
        CallableStatementCallback cs = new CallableStatementCallback() {
        
        public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
                SQLException {
                    arg0.registerOutParameter(1, OracleTypes.VARCHAR);            
                    arg0.registerOutParameter(2, OracleTypes.VARCHAR); 
                    arg0.registerOutParameter(3, OracleTypes.VARCHAR); 
                    arg0.registerOutParameter(4, OracleTypes.VARCHAR);
                    arg0.registerOutParameter(5, OracleTypes.VARCHAR);
                    arg0.registerOutParameter(6, OracleTypes.NUMBER);
                    arg0.registerOutParameter(7, OracleTypes.VARCHAR);                 
                    arg0.execute();
                    
                    String codError = arg0.getString(6);
                    String mensajeError = arg0.getString(7);                        
                    logger.info("respuesta de Ejecucion: " + new StringBuffer(codError).append(mensajeError).toString());
                    
                    if (codError!=null && codError.equals(String.valueOf(ConstantesHermetic.RESULT_SP_OK))){
                        //resultado correcto
                        fechaServidor.setFechaDiaHora(arg0.getString(1));
                        fechaServidor.setFechaDia(arg0.getString(2));
                        fechaServidor.setFechaManana(arg0.getString(3));                                                                        
                        fechaServidor.setFechaDiaSinForm(arg0.getString(4));                                                                        
                        fechaServidor.setFechayyyymmddHHMISS(arg0.getString(5)); 
                    }else{
                        //resultado con errores                           
                        logger.error("Error de Ejecucion: " + new StringBuffer(codError).append(mensajeError).toString());                    
                    }                                
                    //resultado.append(arg0.getString(1));           
    
                return fechaServidor;
            }
        };
        this.jdbcTemplate.execute(SQL, cs);

        return fechaServidor;
        
    }
    public String getDescripcionGenerica(final String codGrupTipo,final String codTipo,final String tipoDesc){

        String SQL = "{ ? = call APERTURA.HWPG_TABL.HWFU_RETU_DESC(?,?,?) }";

        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        final StringBuffer descripcion = new StringBuffer();
        CallableStatementCallback cs = new CallableStatementCallback() {
        
        public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
                SQLException {
                    arg0.registerOutParameter(1, OracleTypes.VARCHAR); 
                    arg0.setString(2, codGrupTipo);            
                    arg0.setString(3, codTipo);            
                    arg0.setString(4, tipoDesc);            
                    arg0.execute();
                    descripcion.append(arg0.getString(1));
                return descripcion;
            }
        };
        this.jdbcTemplate.execute(SQL, cs);

        return descripcion.toString();
        
    }
    /********************MODIFICADO POR JS*************************************/
    public String getDescCuenta(final String codCliente,final String codSucuHtb,final String codCuenta){
        String SQL = "{ ? = call APERTURA.HWPG_TABL.HWFU_RETU_DESC_CNTA(?,?,?) }";CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        final StringBuffer descripcion = new StringBuffer();
        CallableStatementCallback cs = new CallableStatementCallback() {
        
        public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
                SQLException {
                    arg0.registerOutParameter(1, OracleTypes.VARCHAR); 
                    arg0.setString(2, codCliente);            
                    arg0.setString(3, codSucuHtb);            
                    arg0.setString(4, codCuenta);            
                    arg0.execute();
                    descripcion.append(arg0.getString(1));
                return descripcion;
            }
        };
        this.jdbcTemplate.execute(SQL, cs);

        return descripcion.toString();
    }
    
    public List getListGrupTipoGenerico(final String codGrupTipo) {

        String SQL = 
            "{ call APERTURA.HWPG_TABL.HWPR_LIST_TABL_TIPO(?,?,?,?) }";
        final List listResult = new ArrayList();
        CadenaUtil.logSQL(this.getClass(),new Exception().getStackTrace()[0].getMethodName(),SQL);
        this.jdbcTemplate.execute(SQL, new CallableStatementCallback() {
                    public Object doInCallableStatement(CallableStatement arg0) throws DataAccessException, 
                                                                                       SQLException {
                        arg0.setString(1, codGrupTipo);                        
                        arg0.registerOutParameter(2, OracleTypes.CURSOR);
                        arg0.registerOutParameter(3, OracleTypes.NUMBER);
                        arg0.registerOutParameter(4, OracleTypes.VARCHAR);                        
                        arg0.execute();                        
                        
                        ResultSet rs = (ResultSet)arg0.getObject(2);
                        TiposBean tiposBean = null;

                        while (rs.next()) {
                            tiposBean = new TiposBean();
                            tiposBean.setCodigo(rs.getString(1));
                            tiposBean.setDescripcion(rs.getString(2));
                            listResult.add(tiposBean);
                        }

                        return listResult;
                    }
                });

        return listResult;

    }    
    public int inseCateConf(String desCate){
        Map map = new HashMap();
        map.put("P_DES_CATE",desCate);
        int erro = 0;
        try{
            sqlMapClient.insert("inseCateConf",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro!=0)
                throw new Error(map.get("S_MENS").toString());
        }catch(Exception e){
            erro = 1;
        }
        return erro;
    }
    public int modiCateConf(String codCate,String desCate,int indActi){
        Map map = new HashMap();
        map.put("P_COD_TIPO",codCate);
        map.put("P_DES_CATE",desCate);
        map.put("P_IND_ACTI",indActi);
        int erro = 0;
        try{
            sqlMapClient.insert("modiCateConf",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro!=0)
                throw new Error(map.get("S_MENS").toString());
        }catch(Exception e){
            erro = 1;
        }
        return erro;
    }
    public int inseCateDeta(String desCate){
        Map map = new HashMap();
        map.put("P_DES_CATE",desCate);
        int erro = 0;
        try{
            sqlMapClient.insert("inseCateDeta",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro!=0)
                throw new Error(map.get("S_MENS").toString());
        }catch(Exception e){
            erro = 1;
        }
        return erro;
    }
    public int modiCateDeta(String codCate,String desCate,int indActi){
        Map map = new HashMap();
        map.put("P_COD_TIPO",codCate);
        map.put("P_DES_CATE",desCate);
        map.put("P_IND_ACTI",indActi);
        int erro = 0;
        try{
            sqlMapClient.insert("modiCateDeta",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro!=0)
                throw new Error(map.get("S_MENS").toString());
        }catch(Exception e){
            erro = 1;
        }
        return erro;
    }
    public List getListConfiParamByCateAndSubCate(String codCliente,String codSucursal,String codCate,String codSubCate){
        List listConfiParamByCateAndSubCate = new ArrayList();
        Map map = new HashMap();
        logger.info(" metodo : getListConfiParamByCateAndSubCate ....");
        logger.info(" codCliente : "+codCliente);
        logger.info(" codSucursal : "+codSucursal);
        logger.info(" codCate : "+codCate);
        logger.info(" codSubCate : "+codSubCate);
        
        map.put("P_COD_CLIENTE",codCliente);
        map.put("P_COD_SUCURSAL",codSucursal);
        map.put("P_COD_CATE",codCate);
        map.put("P_COD_SUB_CATE",codSubCate);
        int erro=0;
        try{
            sqlMapClient.queryForObject("getListConfiParamByCateAndSubCate",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro==0)
                listConfiParamByCateAndSubCate=(List)map.get("S_LIST");
            else
                throw new Error(map.get("S_MENS").toString());
        }catch(Exception e){
            logger.error(e);
        }
        return listConfiParamByCateAndSubCate;
    }
    public int inseConfParamClie(ConfBean confBean) {
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_CLIENTE",confBean.getCliente());
        map.put("P_COD_SUCURSAL",confBean.getSucursal() );
        map.put("P_COD_CATE",confBean.getCodCate() );
        map.put("P_COD_SUB_CATE",confBean.getCodSubCate() );
        map.put("P_NUM_PARAM",confBean.getNumericParam() );
        map.put("P_DES_PARAM",confBean.getStringParam() );
        map.put("P_FEC_PARAM",confBean.getDateParam() );
        map.put("P_COD_USUA_CREA",confBean.getUsuario());
        map.put("P_NOM_COMP_CREA",confBean.getNomCompUsua());       
        try{
            sqlMapClient.insert("inseConfParamClie",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro!=0)
                throw new Exception(map.get("S_MENS").toString());
        }catch(Exception e){
            logger.error(e);
            erro=1;
        }
        return erro;
    }
    public int modiConfParamClie(ConfBean confBean){
        Map map = new HashMap();
        int erro = 0;
        map.put("P_COD_CLIENTE",confBean.getCliente());
        map.put("P_COD_SUCURSAL",confBean.getSucursal() );
        map.put("P_COD_CATE",confBean.getCodCate() );
        map.put("P_COD_SUB_CATE",confBean.getCodSubCate() );
        map.put("P_NUM_PARAM",confBean.getNumericParam() );
        map.put("P_DES_PARAM",confBean.getStringParam() );
        map.put("P_FEC_PARAM",confBean.getDateParam() );
        map.put("P_IND_ACTI",confBean.isChecked());
        map.put("P_COD_USUA_CREA",confBean.getUsuario());
        map.put("P_NOM_COMP_CREA",confBean.getNomCompUsua()); 
        try{
            sqlMapClient.update("modiConfParamClie",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro!=0)
                throw new Exception(map.get("S_MENS").toString());
        }catch(Exception e){
            logger.error(e);
            erro=1;
        }
        return erro;
    }
    public List getListDenominacionesByTipUnidMone(String tipUnidMone){
        List listDenominacionesByTipUnidMone = new ArrayList();
        Map map = new HashMap();
        map.put("P_TIP_UNID_MONE",tipUnidMone);
        int erro=0;
        try{
            sqlMapClient.queryForObject("getListDenominacionesByTipUnidMone",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro==0)
                listDenominacionesByTipUnidMone=(List)map.get("S_LIST");
            else
                throw new Error(map.get("S_MENS").toString());
        }catch(Exception e){
            logger.error(e);
        }
        return listDenominacionesByTipUnidMone;
    }
    public int getTiempoTrancurrido(String date){
        Map map = new HashMap();
        map.put("P_DATE",date);
        int tiempoTranscurrido=0;
        try{
            sqlMapClient.queryForObject("getTiempoTrancurrido",map);
            tiempoTranscurrido = (Integer)map.get("S_TIME");
        }catch(Exception e){
            logger.error(e);
            tiempoTranscurrido = 0;
        }
        return tiempoTranscurrido;
    }
    public User getUserByName(String username){
        User user = null;
        Map map = new HashMap();
        map.put("p_usu_web",username);
        try{
            sqlMapClient.queryForObject("getUserByName",map);
            int erro = (Integer)map.get("s_erro");
            String s_mens = (String)map.get("s_mens");
            if(erro==0){
                logger.info(s_mens);
                user = (User)((List)map.get("s_list")).get(0);    
            }
            else
                logger.error(s_mens);    
            return user;
        }catch(Exception e){
        logger.error(e);
        return user;
        }
    }
    public List getClieByUser(String usuWeb) throws SQLException{
        return sqlMapClient.queryForList("getClieByUser",usuWeb);
    }
    
    public Collection getRolesByPerf(String codPerf,String codModu){
        Map map = new HashMap();
        List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>();
        List roleList = new ArrayList();
        try{
            map.put("p_cod_perf",codPerf);
            map.put("p_cod_modu",codModu);
            sqlMapClient.queryForObject("getRolesByPerf",map);
            int erro = (Integer)map.get("s_erro");
            String s_mens = (String)map.get("s_mens");
            if(erro==0){
                logger.info(s_mens);
                roleList = (List)map.get("s_list");
                if(roleList==null)
                    roleList = new ArrayList();
                for(Iterator ite = roleList.iterator(); ite.hasNext();){
                    String role = (String)ite.next();
                    authList.add(new GrantedAuthorityImpl("ROLE_"+role) );                    
                }  
                    
                logger.info("# roles : "+roleList.size());
            }
            else
                logger.error(s_mens);    
            return authList;
        }catch(Exception e){
            logger.error(e);
            return new ArrayList();
        }
    }
    public String getPerfByUsernameAndCodRazoSoci(String usuWeb,int codRazoSoci){
        Map map = new HashMap();
        String codPerf = null;
        try{
            map.put("P_USU_WEB",usuWeb);
            map.put("P_COD_RAZO_SOCI",codRazoSoci);
            sqlMapClient.queryForObject("getPerfByUsernameAndCodRazoSoci",map);
            int erro = (Integer)map.get("S_ERRO");
            String s_mens = (String)map.get("S_MENS");
            if(erro==0)
                codPerf = map.get("S_COD_PERF").toString();
            else
                logger.error(s_mens);
        }catch(Exception e){
            logger.error(e);
        }
        return codPerf;
    }
    public String getUrlModu(String codModu){
        Map map = new HashMap();
        String desDireWeb = null;
        try{
            map.put("P_COD_MODU",codModu);
            sqlMapClient.queryForObject("getUrlModu",map);
            int erro = (Integer)map.get("S_ERRO");
            String s_mens = (String)map.get("S_MENS");
            if(erro==0)
                desDireWeb = map.get("S_URL").toString();
            else
                logger.error(s_mens);
        }catch(Exception e){
            logger.error(e);
        }
        return desDireWeb;
    }
    public void inseAudit(AuditBean auditBean) throws SQLException{
        ResourceBundle resource = ResourceBundle.getBundle("spring-ws");
        String locationUri = resource.getString("auditoriaws");
        logger.info("conectandose a: "+locationUri);
        Map map = new HashMap();
        try{
            InseAuditClient inseAuditClient = new InseAuditClient(locationUri);
            map = inseAuditClient.inseAudit(auditBean);
            logger.info("Resultado: "+map.get("sErro")+", Mensaje: "+map.get("sMens"));
        }catch(Exception e){
          for(StackTraceElement st: e.getStackTrace()){
            logger.error(st.toString());
          }
        }
    }
    /*JRA 19/04/2011*/
    public List getListSucursales(String desSucu,String codCliente,String tipCnta) throws Exception {
        Map map = new HashMap();
        List listSucu=new ArrayList();
        try{
            map.put("P_DES_SUCU",desSucu);
            map.put("P_COD_CLIE",codCliente);
            map.put("P_TIP_CNTA",tipCnta);
            sqlMapClient.queryForObject("getListSucursal",map);
            
            int erro = (Integer)map.get("S_ERRO");
            String s_mens = (String)map.get("S_MENS");
            if(erro==0){
                listSucu = (List)map.get("S_LIST");     
            }  
        }
        catch(Exception e){
            logger.error(e);
            return new ArrayList();
        }
        return listSucu;
    }
    
    public String getDescSucursal(String codSucu) {
        Map map = new HashMap();
        List listSucu=new ArrayList();
        String descripcionSucu="";
        try{
            map.put("P_COD_SUCU_HTB",codSucu);
            sqlMapClient.queryForObject("getDescSucursal",map);
            
            int erro = (Integer)map.get("S_ERRO");
            String s_mens = (String)map.get("S_MENS");
            if(erro==0){
                listSucu = (List)map.get("S_LIST");     
            }
            if (listSucu!=null && listSucu.size()>0){
                SucursalBean s=(SucursalBean)listSucu.get(0);
                descripcionSucu=s.getDesSucursal();
            }
        }
        catch(Exception e){
            logger.error(e);
            return "";
        }
        return descripcionSucu;
    }
    
  public String getSucuFromPunt(String codPunt) {
      Map map = new HashMap();
      String codSucu="";
      try{
          map.put("P_COD_PUNT",codPunt);
          sqlMapClient.queryForObject("getSucuFromPunt",map);
          
          int erro = (Integer)map.get("S_ERRO");
          if (erro==0){
              codSucu=map.get("S_COD_SUCU").toString();
          }
      }
      catch(Exception e){
          logger.error(e);
          return "";
      }
      return codSucu;
  }
    
    
    public List getListDenomMone(String tipoUnidMone) {
        Map map = new HashMap();
        List listDenom=new ArrayList();
        try{
            map.put("P_TIP_UNID_MONE",tipoUnidMone);
            sqlMapClient.queryForObject("getListDenomMone",map);      
            String s_mens = (String)map.get("S_MENSAJE");
            listDenom = (List)map.get("S_LIST");     

        }
        catch(Exception e){
            logger.error(e);
            return new ArrayList();
        }
        return listDenom;
    }
    
    public List getListConfigArchInd(String desCliente,String estado) {
        Map map = new HashMap();
        List listConfigArchInd=new ArrayList();
        try{
            map.put("P_DESC_CLIE",desCliente);
            map.put("P_EST",estado);
            sqlMapClient.queryForObject("getListConfigArchInd",map);      
            String s_mens = (String)map.get("S_MENS");
            listConfigArchInd = (List)map.get("S_LIST");     

        }
        catch(Exception e){
            logger.error(e);
            return new ArrayList();
        }
        return listConfigArchInd;
    }
    
    public List getListTipoArchXClie(String codCliente,String desTipo) {
        Map map = new HashMap();
        List listConfigArchInd=new ArrayList();
        try{
            map.put("P_COD_CLIE",codCliente);
            map.put("P_DES_TIPO",desTipo);
            sqlMapClient.queryForObject("getListTipoArchXClie",map);      
            String s_mens = (String)map.get("S_MENS");
            listConfigArchInd = (List)map.get("S_LIST");     

        }
        catch(Exception e){
            logger.error(e);
            return new ArrayList();
        }
        return listConfigArchInd;
    }
    
    public void updateTipoArchXClienteMap(String codRepo, String codClie, 
                                          String estado, String tipo) {
                                          
        Map map = new HashMap();
        try{
            map.put("P_COD_REPO",codRepo);
            map.put("P_COD_CLIE",codClie);
            map.put("P_ESTADO",estado);
            map.put("P_TIP_OPER",tipo);
            sqlMapClient.queryForObject("updateTipoArchXCliente",map);      
            Integer s_erro = (Integer)map.get("S_ERRO");
            if (s_erro!=null && s_erro >0){
                String s_mens=(String) map.get("S_MENS");
                throw new Exception(s_mens);
            }
        }
        catch(Exception e){
            logger.error(e);
        }   
    }
    
    public List listTipoArchIndiXClie(String codClie) {
        Map map = new HashMap();
        List listConfigArchInd=new ArrayList();
        try{
            map.put("P_COD_CLIE",codClie);
            sqlMapClient.queryForObject("listTipoArchIndiXClie",map);      
            String s_mens = (String)map.get("S_MENS");
            listConfigArchInd = (List)map.get("S_LIST");     

        }
        catch(Exception e){
            logger.error(e);
            return new ArrayList();
        }
        return listConfigArchInd;
    }
    
    public int insActTipoArchIndi(String codClie, String cod_tipo_repo, 
                                  String fec_repo, String ruta_orig, 
                                  String ruta_dest_serv, String ruta_dest_oas, 
                                  String estado, String nom_repo, 
                                  String nom_comp_modi, String cod_usua_modi, 
                                  String fec_modi) {
        Map map = new HashMap();
        map.put("P_COD_CLIE",codClie);
        map.put("P_COD_TIPO_REPO",cod_tipo_repo);
        map.put("P_FEC_REPO",fec_repo);
        map.put("P_RUTA_ORIG",ruta_orig);
        map.put("P_RUTA_DEST_SERV",ruta_dest_serv);
        map.put("P_RUTA_DEST_OAS",ruta_dest_oas);
        map.put("P_ESTADO",estado);
        map.put("P_NOM_REPO",nom_repo);
        map.put("P_NOM_COMP_MODI",nom_comp_modi);
        map.put("P_COD_USUA_MODI",cod_usua_modi);
        map.put("P_FEC_MODI",fec_modi);
        int erro = 0;
        try{
            sqlMapClient.queryForObject("insActTipoArchIndi",map);
            erro=(Integer)map.get("S_ERRO");
            if (erro>0) logger.error((String)map.get("S_MENS"));
            return erro;
        }catch(Exception e){
            logger.error(e);
            e.printStackTrace();
            return 1;
        }    
    }
    
    public List listIndicServicio(String codClie, String codTipo, 
                                  String nombre, String fechaInic, 
                                  String fechaHast) {
        Map map = new HashMap();
        List listArchIndicadores=new ArrayList();
        try{
            map.put("P_COD_CLIE",codClie);
            map.put("P_COD_TIPO_REPO",codTipo);
            map.put("P_DES_NOM",nombre);
            map.put("P_FEC_DES",fechaInic);
            map.put("P_FEC_HAS",fechaHast);
            sqlMapClient.queryForObject("listIndicServicio",map);      
            String s_mens = (String)map.get("S_MENS");
            listArchIndicadores = (List)map.get("S_LIST");     

        }
        catch(Exception e){
            logger.error(e);
            return new ArrayList();
        }
        return listArchIndicadores;
    }
    
    public int eliminaArchIndicador(String codCliente,String tipoReporte,String fecha,String rutaOAS,String nombre,String codUsuario){
        Map map = new HashMap();
        map.put("P_COD_CLIE",codCliente);
        map.put("P_COD_TIPO_REPO",tipoReporte);
        map.put("P_FEC_REPO",fecha);
        map.put("P_RUTA_DEST_OAS",rutaOAS);
        map.put("P_NOM_REPO",nombre);
        map.put("P_COD_USUA",codUsuario);
        int erro = 0;
        try{
            sqlMapClient.queryForObject("eliminaArchIndicador",map);
            erro=(Integer)map.get("S_ERRO");
            if (erro>0) logger.error((String)map.get("S_MENS"));
            return erro;
        }catch(Exception e){
            logger.error(e);
            e.printStackTrace();
            return 1;
        }    
    }
    
    public List getArchRepoHistorico(String codClie, String codSucursal, 
                                     String codCuenta, String tipoUnidMone, 
                                     String fechaProc, String codBove, 
                                     String codRepo) {
        Map map = new HashMap();
        List listArchRepoHistorico=new ArrayList();
        try{
            map.put("P_COD_CLIE",codClie);
            map.put("P_COD_SUCU",codSucursal);
            map.put("P_COD_CNTA",codCuenta);
            map.put("P_TIP_UNID_MONE",tipoUnidMone);
            map.put("P_FEC_PROC",fechaProc);
            map.put("P_COD_BOVE",codBove);
            map.put("P_COD_REPO",codRepo);
            sqlMapClient.queryForObject("getArchRepoHistorico",map);      
            String s_mens = (String)map.get("S_MENS");
            listArchRepoHistorico = (List)map.get("S_LIST");     

        }
        catch(Exception e){
            logger.error(e);
            return new ArrayList();
        }
        return listArchRepoHistorico;
    }
    
    /*JRA*/
    
     public List buscarFavoritos(final String usuario, 
                               final int razonSocial){
     
        Map map = new HashMap();
        map.put("P_USU_WEB",usuario);
        map.put("P_RAZO_SOC_USU",String.valueOf(razonSocial));
        List listFavoritos=new ArrayList();
        int erro = 0;
        try{
            sqlMapClient.queryForObject("buscarFavoritos",map);
            erro=(Integer)map.get("S_ERRO");
            if(erro==0)
                listFavoritos = (List)map.get("S_LIST");
            else
                throw new Exception((String)map.get("S_MENS"));
        }catch(Exception e){
            logger.error(e);
            e.printStackTrace();
            listFavoritos = new ArrayList();
        }
        return listFavoritos;
                              }
     public int eliminarFavoritos(final String Usuario,final int razonSocial, final String codOpci){
         Map map = new HashMap();
         map.put("P_RAZO_SOC_USU",String.valueOf(razonSocial));
         map.put("P_USU_WEB",Usuario);
         map.put("P_COD_OPCI",codOpci);
         
         int erro = 0;
         try{
             sqlMapClient.queryForObject("eliminarFavoritos",map);
             erro=(Integer)map.get("S_ERRO");
             return 0;
         }catch(Exception e){
             logger.error(e);
             e.printStackTrace();
             return 1;
         }    
     }      
     
     public int agregarFavoritos(final String usuario,final int razonSocial, final String codOpci,final String codPerf){
        Map map = new HashMap();
        map.put("P_RAZO_SOC_USU",String.valueOf(razonSocial));
        map.put("P_USU_WEB",usuario);
        map.put("P_COD_OPCI",codOpci);
        map.put("P_COD_PERF",codPerf);
        int erro = 0;
        try{
            sqlMapClient.queryForObject("agregarFavoritos",map);
            erro=(Integer)map.get("S_ERRO");
            return 0;
        }catch(Exception e){
            logger.error(e);
            e.printStackTrace();
            return 1;
        }      
    }
    
    public List getModulos(final String codModu,final String user,final String perfil,final String codRazoSoci,final String indOpciMenu){
    List listModuloMenu = new ArrayList();
    Map map = new HashMap();
    map.put("P_COD_MODU",codModu);
    map.put("P_USU_WEB",user);
    map.put("P_COD_PERF",perfil);
    map.put("P_COD_RAZO_SOCI",codRazoSoci);
    map.put("P_IND_MENU",indOpciMenu);
    int erro = 0;
    try{
        sqlMapClient.queryForObject("getModulos",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            listModuloMenu=(List)map.get("S_LIST");
        else
            throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }
    return listModuloMenu;
    }
    public boolean isValidSucuByCntaAndTipUnidMone(int codClie, int codCnta, int tipUnidMone, int codSucuHtb){
        boolean isValidSucuByCntaAndTipUnidMone = false;
        Map map = new HashMap();
        map.put("P_COD_CLIE",codClie);
        map.put("P_COD_CNTA",codCnta);
        map.put("P_TIP_UNID_MONE",tipUnidMone);
        map.put("P_COD_SUCU_HTB",codSucuHtb);
        try{
            sqlMapClient.queryForObject("isValidSucuByCntaAndTipUnidMone",map);
            isValidSucuByCntaAndTipUnidMone = (Boolean)map.get("S_IS_VALID_SUCU");
        }catch(Exception e){
            isValidSucuByCntaAndTipUnidMone = false;
            logger.error(e);
        }
        return isValidSucuByCntaAndTipUnidMone;
    }
    public List getListClieAlertBove(){
        List list = new ArrayList();
        Map map = new HashMap();
        int erro = 0;
        try{
            sqlMapClient.queryForObject("getListClieAlertBove",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro==0)
                list=(List)map.get("S_LIST");
            else
                throw new Exception(map.get("S_MENS").toString());
        }catch(Exception e){
            logger.error(e);
        }
        return list;
    }
    public List getListUsuaClie(int codClie){
        List list = new ArrayList();
        Map map = new HashMap();
        map.put("P_COD_CLIE",codClie);
        int erro = 0;
        try{
            sqlMapClient.queryForObject("getListUsuaClie",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro==0)
                list=(List)map.get("S_LIST");
            else
                throw new Exception(map.get("S_MENS").toString());
        }catch(Exception e){
            logger.error(e);
        }
        return list;
    }
    public int inseConfMailClie(String usuWeb,String codAlert,String usuWebModi,String nomComp){
        Map map = new HashMap();
        map.put("P_USU_WEB",usuWeb);
        map.put("P_COD_ALERT",codAlert);
        map.put("P_USU_WEB_MODI",usuWebModi);
        map.put("P_NOM_COMP",nomComp);
        int erro = 0;
        try{
            sqlMapClient.insert("inseConfMailClie",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro!=0)
                throw new Exception(map.get("S_MENS").toString());
        }catch(Exception e){
            logger.error(e);
        }
        return erro;
    }
    public int modiConfMailClie(String usuWeb,String codAlert,String usuWebModi,String nomComp){
        Map map = new HashMap();
        map.put("P_USU_WEB",usuWeb);
        map.put("P_COD_ALERT",codAlert);
        map.put("P_USU_WEB_MODI",usuWebModi);
        map.put("P_NOM_COMP",nomComp);
        int erro = 0;
        try{
            sqlMapClient.insert("modiConfMailClie",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro!=0)
                throw new Exception(map.get("S_MENS").toString());
        }catch(Exception e){
            erro = 1;
        }
        return erro;
    }
    public int delConfMailClie(String usuWeb,String codAlert){
        Map map = new HashMap();
        map.put("P_USU_WEB",usuWeb);
        map.put("P_COD_ALERT",codAlert);
        int erro = 0;
        try{
            sqlMapClient.insert("delConfMailClie",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro!=0)
                throw new Exception(map.get("S_MENS").toString());
        }catch(Exception e){
            erro = 1;
        }
        return erro;
    }
    public List getListConfMailClie(int codClie, String codAlert){
        List list = new ArrayList();
        Map map = new HashMap();
        map.put("P_COD_CLIE",codClie);
        map.put("P_COD_ALERT",codAlert);
        int erro = 0;
        try{
            sqlMapClient.queryForObject("getListConfMailClie",map);
            erro = (Integer)map.get("S_ERRO");
            if(erro==0)
                list=(List)map.get("S_LIST");
            else
                throw new Exception(map.get("S_MENS").toString());
        }catch(Exception e){
            logger.error(e);
        }
        return list;
    }
    /*JRA REQ1614*/
    public Integer getCbmcParmValo(Integer codSucuHtb,Integer numParm){
      Integer valor=new Integer(0);
      Map map = new HashMap();
      map.put("P_COD_SUCU_HTB",codSucuHtb);
      map.put("P_NUM_PARM",numParm);
      try{
          sqlMapClient.queryForObject("getCbmcParmValo",map);
          valor = (Integer)map.get("S_PARM_VALO");
      }catch(Exception e){
          logger.error(e);
          logger.error(map.get("S_MENS").toString());
      }
      return valor;
    }
    /*FIN JRA REQ1614*/

    public List getTipoProcesos(){
      List listTipoProcesos = new ArrayList();
      Map map = new HashMap();
      int erro = 0;
      try{
          sqlMapClient.queryForObject("getTiposProc",map);
          erro = (Integer)map.get("S_ERRO");
          if(erro==0)
              listTipoProcesos=(List)map.get("S_LIST");
          else
              throw new Error(map.get("S_MENS").toString());
      }catch(Exception e){
          logger.error(e);
    }
      return listTipoProcesos;                     
                           
    }
    
    
    /**
   * Metodo utilizado para obtener la lista de prioridades de los cajeros
   * automaticos, recibe como parametros 
   * int codClie: codigo de cliente,
   * int codSucuHtb: codigo de sucursal elegida, 
   * int codPunt: codigo de punto,
   * String fecAten: fecha de atencion del pedido
   * **/
  public List<TiposBean> getListPrioAtm(int codClie,int codSucuHtb, int codPunt,String fecAten) throws Exception {
      Map map = new HashMap();
      List<TiposBean> list=new ArrayList<TiposBean>();
      try{
          map.put("P_COD_CLIE",codClie);
          map.put("P_COD_SUCU_HTB",codSucuHtb);
          map.put("P_COD_PUNT",codPunt);
          map.put("P_FEC_ATEN",fecAten);
          sqlMapClient.queryForObject("getListPrioAtm",map);
          
          int erro = (Integer)map.get("S_ERRO");
          String s_mens = (String)map.get("S_MENS");
          if(erro==0){
              list = (List)map.get("S_LIST");     
          }else
              throw new Exception(s_mens);
      }
      catch(Exception e){
          logger.error(e);          
      }
      return list;
  }  
  
     
        
  
  
  
  /**
  * Metodo utilizado para obtener la lista estados de los
  * pedidos, no recibe parametros
  * */
  public List getListEstados() throws SQLException{
      List list = new ArrayList();
      Map map = new HashMap();
      int erro = 0;
      try{
         sqlMapClient.queryForList("getListEstados",map);
         erro = (Integer)map.get("S_ERRO");
         if (erro == 0)
            list = (List)map.get("S_LIST");
         else
            throw new Exception (map.get("S_MENS").toString());
      }catch (Exception e){
         logger.error(e);         
      }
      return list;
  }
  
  public List getListEstadosGeneral(String codEstado){
      List list = new ArrayList();
      Map map = new HashMap();
      int erro = 0;
      map.put("P_COD_GRUP_ESTD", codEstado);
      try{
         sqlMapClient.queryForList("getListEstadosGeneral",map);
         erro = (Integer)map.get("S_ERRO");
         list = (List)map.get("S_LIST");
      }catch (Exception e){
         logger.error(e);         
      }
      return list;
  }
  
  
  public List<TiposBean> buscarTipoIngresoPedido(String desTipo) throws Exception{  
    List<TiposBean> list = new ArrayList();
    Map map = new HashMap();
    map.put("P_DES_TIPO",desTipo);
    int erro = 0;
    try{
        sqlMapClient.queryForObject("getTiposIngresoPedido",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            list=(List)map.get("S_LIST");
        else
            throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }
    return list;       
  }
  public List<TarjetaEntity> getListTjtasRetenidas(int codClie, String codSucuHtb,String fecEmisDsde,String fecEmisHsta){
        List<TarjetaEntity> list = new ArrayList();
        Map map = new HashMap();
        map.put("P_COD_CLIE", codClie);
        map.put("P_COD_SUCU", codSucuHtb);
        map.put("P_FEC_DESD", fecEmisDsde);
        map.put("P_FEC_HAST", fecEmisHsta);
        int erro = 0;
        try {
            sqlMapClient.queryForObject("getListTjtasRetenidas", map);
            erro = (Integer)map.get("S_ERRO");
            if (erro == 0)
                list = (List)map.get("S_LIST");
            else
                throw new Exception(map.get("S_MENS").toString());
        } catch (Exception e) {
            logger.error(e);
            list = Collections.emptyList();
        }
        return list;
  }
  
  public EmpleadoBean getEmplByPuesto(String codPuesto) {
        Map map = new HashMap();
        map.put("P_COD_PSTO", codPuesto);
        String codEmpl = "";
        String nomEmpl = "";
        String firm = "";
        EmpleadoBean empleado = new EmpleadoBean();
        try {
            sqlMapClient.queryForObject("getEmplByPuesto", map);
            codEmpl = (String)map.get("S_COD_EMPL");
            nomEmpl = (String)map.get("S_NOMB");
            firm = (String)map.get("S_FIRM");
            empleado = new EmpleadoBean(codEmpl,nomEmpl, firm);
        } catch (Exception e) {
            logger.error(e);
        }
        return empleado;
    }
  
  public List<String> getListClieByParam(String codCate,String codSubCate){
    List<String> list = new ArrayList<String>();
    Map map = new HashMap();
    map.put("P_COD_CATE", codCate);
    map.put("P_COD_SUB_CATE", codSubCate);
    int erro = 0;
    try {
        sqlMapClient.queryForObject("getListClieByParam", map);
        erro = (Integer)map.get("S_ERRO");
        if (erro == 0)
            list = (List<String>)map.get("S_LIST");
        else
            throw new Exception(map.get("S_MENS").toString());
    } catch (Exception e) {
        logger.error(e);
        list = Collections.emptyList();
    }
    return list;
  }
  
  public List<DenominacionEntity> getListDenoAbasATMMap(){
    List<DenominacionEntity> list = new ArrayList<DenominacionEntity>();
    Map map = new HashMap();
    int erro = 0;
    try {
        sqlMapClient.queryForObject("getListDenoAbasATM", map);
        erro = (Integer)map.get("S_ERRO");
        if (erro == 0)
            list = (List<DenominacionEntity>)map.get("S_LIST");
        else
            throw new Exception(map.get("S_MENS").toString());
    } catch (Exception e) {
        logger.error(e);
        list = Collections.emptyList();
    }
    return list;  
  }
 
  public List<ConfBean> getListNiveles(int codCli, String codPro) throws Exception{
        Map map = new HashMap();
        List<ConfBean> list=new ArrayList<ConfBean>();
        try{
            map.put("P_COD_CLIE",codCli);
            map.put("P_TIP_PROC",codPro);
            sqlMapClient.queryForObject("getListNiveles",map);
            
            int erro = (Integer)map.get("S_ERRO");
            String s_mens = (String)map.get("S_MENS");
            if(erro==0){
                list = (List)map.get("S_LIST");     
            }else
                throw new Exception(s_mens);
        }catch(Exception e){
            logger.error(e);          
        }
        return list;
  } 
  
  public List getListLogConfNiv(String codClie, String tipDocu, String numPedi, String codSeri){
    List list = new ArrayList();
    Map map = new HashMap();
    map.put("P_COD_CLIE",Integer.parseInt(codClie));
    map.put("P_TIP_DOCU_PEDI",tipDocu);
    map.put("P_NUM_PEDI",numPedi);
    map.put("P_COD_SERI",codSeri);
    int erro = 0;
    try{
        sqlMapClient.queryForObject("getListLogConfNiv",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            list=(List)map.get("S_LIST");
        else
            throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }
    return list;
  }        
  
  public List getFechaPublicacion(String opcion, String codClie, String listCodSucu){
    List list = new ArrayList();
    Map map = new HashMap();
    int erro = 0;
    try{
        map.put("P_COD_CLIE",codClie);
        map.put("P_COD_REPO",opcion);
        map.put("P_LIST_COD_SUCU",listCodSucu);
        sqlMapClient.queryForObject("getFechaPublicacion",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            list = (List)map.get("S_LIST");
        else
          throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }
    return list;  
  }
  
  public List getTiposDinamico(int codGrupTipo, int indTipo, String campo){
    List list = new ArrayList();
    Map map = new HashMap();
    int erro = 0;
    try{
        map.put("P_COD_GRUP_TIPO",codGrupTipo);
        map.put("P_IND_TIPO",indTipo);
        map.put("P_CAMP_TIPO",campo);
        sqlMapClient.queryForObject("getTiposDinamico",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            list = (List)map.get("S_LIST");
        else
          throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }
    return list;  
  }
  
  public String getSeriDocu(String tipDocu, String codSucuHtb){
    String seriDocu = "";
    Map map = new HashMap();
    int erro = 0;
    try{
        map.put("P_TIP_DOCU",tipDocu);
        map.put("P_COD_SUCU_HTB",codSucuHtb);
        sqlMapClient.queryForObject("getSeriDocu",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            seriDocu = (String)map.get("S_SERI_DOCU");
        else
          throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }
    return seriDocu;  
  }
  
  
  /**
  * Metodo utilizado para obtener la lista de Reportes por Cliente configurados:
  * String codClie: codigo de cliente
  * **/
  public List<TiposBean> getListTiposReportes(String codClie){
    List listTiposRepo = new ArrayList();
    Map map = new HashMap();
    int erro = 0;
    try{
        //map.put("P_COD_CLIE",Integer.parseInt(codClie));
        map.put("P_COD_CLIE",codClie);
        sqlMapClient.queryForObject("getListTiposReportes",map);
        erro = (Integer)map.get("S_ERRO");
        if(erro==0)
            listTiposRepo = (List<TiposBean>)map.get("S_LIST");
        else
          throw new Exception(map.get("S_MENS").toString());
    }catch(Exception e){
        logger.error(e);
    }
    return listTiposRepo;  
  }
  
  /**
  * Metodo utilizado para obtener la lista de Unidad Monetaria:
  * **/
  public List<TiposBean> getListUnidMone(){
    List listUnidMone = new ArrayList();
    Map map = new HashMap();
    try{
        sqlMapClient.queryForObject("getListUnidMone",map);
            listUnidMone = (List<TiposBean>)map.get("S_LIST");
    }catch(Exception e){
        logger.error(e);
    }
    return listUnidMone;  
  }
}
